package com.software.loginregister.api;

import java.util.List;
import java.util.Map;


import com.software.loginregister.entity.EVResponse;
import com.software.loginregister.entity.ResetPasswordRequest;
import com.software.loginregister.entity.Result;
import com.software.loginregister.entity.User;
import com.software.loginregister.entity.vo.UserBasicVO;
import com.software.loginregister.entity.vo.UserDetailVO;
import com.software.loginregister.entity.vo.UserTagDTO;
import com.software.loginregister.entity.vo.UserUpdateDTO;

import okhttp3.MultipartBody;
import okhttp3.RequestBody;
import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.GET;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.PUT;
import retrofit2.http.Part;
import retrofit2.http.Path;
import retrofit2.http.Query;

public interface UserApi {
    @POST("user/login")
    Call<Result<User>> login(@Body Map<String, String> loginForm);

    @POST("user/register")
    Call<Result<String>> register(@Body User user);

    @GET("user/basic/{userId}")
    Call<Result<UserBasicVO>> getBasicInfo(@Path("userId") Long userId);

    @GET("user/detail/{userId}")
    Call<Result<UserDetailVO>> getDetailInfo(@Path("userId") Long userId);

    @PUT("user/update")
    Call<Result<Boolean>> updateUserInfo(@Body UserUpdateDTO updateDTO);
    // 忘记密码
    @POST("user/reset-password")
    Call<EVResponse> resetPassword(@Body ResetPasswordRequest request);
    // 发送验证码
    @POST("api/email/send-code")
    Call<ResponseBody> sendVerificationCode(@Query("email") String email);
    // 保存用户饮食偏好标签
    @POST("user/tags/save")
    Call<Result<Boolean>> saveUserTags(@Body List<UserTagDTO> userTags);
    // 更换用户头像
    @Multipart
    @POST("user/avatar")
    Call<Result<String>> uploadAvatar(
            @Part MultipartBody.Part file,
            @Part("userId") RequestBody userId
    );

}
